package com.jgc.interrupt;

/**
 * Created by Administrator on 2022/3/21.
 */
public class InterruptDemo {
    public static void main(String[] args) throws InterruptedException {

//interrupted 是作用于当前线程，isInterrupted 是作用于调用该方法的线程对象所对应的线程
// 这两个方法最终都会调用同一个方法-----isInterrupted( Boolean 参数)，只不过参数固定为一个是true，一个是false；               注意： isInterrupted( Boolean 参数)是isInterrupted()的重载方法
        //private native boolean isInterrupted( boolean ClearInterrupted);
        //Thread.isInterrupted(true)//如果这个参数为true，说明返回线程的状态位后，要清掉原来的状态位（恢复成原来情况）
        //isInterrupted(false)//这个参数为false，就是直接返回线程的状态位
        //
        Thread thread = new Thread(new Worker());
        thread.start();
        Thread.sleep(200);
        thread.interrupt();// 给线程加上中断标志，线程不会立马中断，但是进入sleep、wait时，会抛出异常，清除中断标志
        Thread.interrupted();//interupted是静态方法 返回状态 不清楚中断状态标志
        thread.isInterrupted();//线程对象的方法 返回状态 清除中断状态标志
    }
    public static class Worker implements Runnable {
        public void run() {
            System.out.println("Worker started.");

            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                //们调用sleep、wait等此类可中断（throw InterruptedException）方法时，一旦方法抛出InterruptedException，当前调用该方法的线程的中断状态就会被jvm自动清除了
                System.out.println("Worker IsInterrupted: " +
                        Thread.currentThread().isInterrupted());
            }

            System.out.println("Worker stopped.");
        }
    }
}
